package com.sxj.corejava.code08_常用类.包装类;

/**
 * @author 石小俊
 * @date 2025年02月18日
 */
public class Test01_定义方式 {

    public static void main(String[] args) {
        byte b = 1;
        Byte b1 = new Byte(b);
        Byte b2 = new Byte("1");
        System.out.println(b1);
        System.out.println(b2);

        Byte b3 = Byte.valueOf(b);
        Byte b4 = Byte.valueOf("1");
        System.out.println(b3);
        System.out.println(b4);
        System.out.println("*********************************");
        Integer i1 = new Integer(1);
        Integer i2 = new Integer("1");
        System.out.println(i1 == i2);
        Integer i3 = Integer.valueOf(1);
        Integer i4 = Integer.valueOf("1");

        Boolean flag1 = new Boolean(true);
        // 当传递字符串作为参数时,只有字符串true的值对应的是布尔类型的true
        // 其他所有字符串都是false
        Boolean flag2 = new Boolean("admin");
        System.out.println(flag1);
        System.out.println(flag2);

        Boolean flag3 = Boolean.valueOf(false);
        Boolean flag4 = Boolean.valueOf("123");
        Boolean flag5 = Boolean.valueOf("1");
        Boolean flag6 = Boolean.valueOf("0");
        Boolean flag7 = Boolean.valueOf("tom");
        System.out.println(flag3);
        System.out.println(flag4);
        System.out.println(flag5);
        System.out.println(flag6);
        System.out.println(flag7);

        // 构造函数中支持float与double
        Float f1 = new Float(3.14);
        Float f2 = new Float(3.14F);
        // 静态方法不支持double
        Float f3 = Float.valueOf(3.14F);

        Double d1 = Double.valueOf(3.14);

        // 字符型参数不支持字符串
        Character c1 = Character.valueOf('a');
        System.out.println("*********************************");
        Integer i5 = Integer.valueOf(100);
        Integer i6 = Integer.valueOf("100");
        System.out.println(i5 == i6);

        Integer i7 = Integer.valueOf(1000);
        Integer i8 = Integer.valueOf("1000");
        System.out.println(i7 == i8);

        // 查看源码
        // low:-128,high:127
//        if (i >= Integer.IntegerCache.low && i <= Integer.IntegerCache.high)
//            return Integer.IntegerCache.cache[i + (-Integer.IntegerCache.low)];
//        return new Integer(i);
        // 即:当值的范围在[-128,127]之间时,没有创建新的对象,不在范围才会创建新的对象
        Integer i9 = Integer.valueOf(128);
        Integer i10 = Integer.valueOf("128");
        System.out.println(i9 == i10);
        System.out.println(i1.getClass());
    }

}
